3、使用Image
这一章,我们将介绍如何添加Image到View中。
Getting ready
新建一个SwiftUI工程,叫做ImageApp
How to do it…
首先让我们添加一些图片到Assert中,然后我们再介绍一些modifier来修改图片样式。
- 替换Text为VStack
- 从https://github.com/PacktPublishing/SwiftUI-Cookbook-2nd-Edition/tree/main/Resources/Chapter01/recipe3下载图片
- 拖动图片到Asserts中
- 添加一个
Image到VStack中
Image("dogs1")

- 添加一个
.resizable()modifier, 他能让SwiftUI调整图片大小以适应可以用空间。
Image("dogs1")
.resizable()

- 我们看到图片被压缩了,继续添加一个
.aspectRatio
Image("dogs1")
.resizable()
.aspectRatio(contentMode: .fit)

- 继续添加 dog-and-nature到
VStack中
Image("dog-and-nature")
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width:300, height:200)
.clipShape(Circle())
.overlay(Circle().stroke(Color.blue, lineWidth: 6))
.shadow(radius: 10)
- 我们写个工具方法来获取UIImage
func getImageFromUIImage(image:String) -> UIImage {
guard let img = UIImage(named: image) else {
fatalError("Unable to load image")
}
return img
}
- 然后使用UIImage来加载图片
Image(uiImage: getImageFromUIImage(image:"dog2"))
.resizable()
.frame(width: 200, height: 200)
.aspectRatio(contentMode: .fit)
- 最终效果

How it works…
添加Image到View上时,Image默认显示原始尺寸。图片可能大了,也可能小了。
要让Image适应屏幕大小,我们需要添加.resizablemodifier。这会让Image缩放以占满可用空间。
为了解决缩放的拉伸问题,我们可以使用.aspectRatiomodifier。
如果我们要限制图片大小固定为某个值,可以使用.framemodifier。
如果想裁剪图片为某个形状,可以使用.clipShapemodifier。
我们还可以使用.overlay和.shadow来添加边框和阴影。
注意modifer的顺序比较重要,不同顺序的组合可能得到不一样的结果。